#ifndef FOC_TASK_H
#define FOC_TASK_H

#include "Foc_math.h"
#include "MotorBLDC.h"

typedef enum
{
    SensorLess = 0,
    UseEncoder,
} MotorSensor_t;

typedef enum
{
    STATE0_MOTOR_IDLE = 0,   // 空闲模式
    STATE0_MOTOR_DETECTING,  // 检测模式
    STATE0_MOTOR_RUN_CUR,    // 电流模式
    STATE0_MOTOR_RUN_VEL,    // 速度模式
    STATE0_MOTOR_RUN_POS,    // 位置模式
    STATE0_MOTOR_RUN_DUO,    // 双环模式
    STATE0_MOTOR_GUARD,      // 守护模式
} MOTOR_UseEncoder_t;

typedef enum
{
    STATE1_MOTOR_IDLE = 0,  // 空闲状态
    STATE1_MOTOR_CLEAR,     // 清除参数
    STATE1_MOTOR_START,     // 开始运行
    STATE1_MOTOR_OPEN,      // 开环运行
    STATE1_MOTOR_HALL,      // 霍尔运行
    STATE1_MOTOR_ENC,       // 编码器运行
    STATE1_MOTOR_SL,        // 无感运行
    STATE1_MOTOR_ZERO,      // 零点对齐
} MOTOR_SensorLess_t;

typedef struct
{
    Motor_Cur_t Motor_Cur;
    Motor_App_t Motor_App;
} Motor_t;

void Foc_Task_Init();

#endif
